package com.library;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;


public class JettyWithSpringMain {

    private static final int DEFAULT_PORT = 8080;
    private static final String DEFAULT_WEBAPP = "/";
    private static final String DEFAULT_WEB = "/WEB-INF/web.xml";
    private static final String DEFAULT_PROJECT = "/";
    private static Server server;

    public static void main(String[] args) throws Exception {
        JettyWithSpringMain.startJetty(getPortFromArgs(args));
    }

    private static int getPortFromArgs(String[] args) {
        if (args.length > 0) {
            try {
                return Integer.valueOf(args[0]);
            } catch (NumberFormatException ignore) {
                System.out.println(ignore);
            }
        }
        return DEFAULT_PORT;
    }

    private static void startJetty(int port) throws Exception {
        server = new Server(port);
        server.setHandler(getWebAppContext());
        server.start();
        server.join();
    }

    public static void stopJetty() throws Exception{
        server.stop();
    }

    private static WebAppContext getWebAppContext(){
        WebAppContext webAppContext = new WebAppContext();

//        webAppContext.setDescriptor(DEFAULT_WEB);
//        webAppContext.setResourceBase(DEFAULT_WEBAPP);
//        webAppContext.setContextPath(DEFAULT_PROJECT);

        webAppContext.setParentLoaderPriority(true);

        webAppContext.setDescriptor("/Users/ycy/Desktop/test/oa_system/src/main/webapp/WEB-INF/web.xml");
        webAppContext.setResourceBase("/Users/ycy/Desktop/test/oa_system/src/main/webapp");
        webAppContext.setContextPath("/");

//        // 配置Jetty以使用Jasper作为JSP引擎
//        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
//        webAppContext.getMetaData().setClassLoader(classLoader);
//
//        // 添加Jasper的Servlet
//        webAppContext.addServlet(org.apache.jasper.runtime.JspRuntimeLibrary.class, "*.jsp");

        // 配置注解
//        webAppContext.setConfigurationClasses(new String[] {
//                AnnotationConfiguration.class.getName(),
//                // 如果需要JSP支持，添加JettyJspServlet
//                "org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
//                "org.eclipse.jetty.webapp.TagLibConfiguration"
//        });
//
//        // 设置JettyJspServlet
//        webAppContext.addEventListener(new org.eclipse.jetty.webapp.JettyWebAppContext());

//        // 配置注解
//        webAppContext.setConfigurationClasses(new String[] {
//                AnnotationConfiguration.class.getName()
//        });
//
//        // 设置JettyJspServlet
//        webAppContext.addEventListener(new org.eclipse.jetty.jsp.JettyJspServlet());


        // 设置 Jetty 中支持 JSP 的类
        webAppContext.setDefaultsDescriptor("org/eclipse/jetty/webapp/webdefault.xml");



        return webAppContext;
    }


    public static void main2(String[] args) throws Exception {
        Server server = new Server(8080); // 设置服务器监听端口为8080

        WebAppContext context = new WebAppContext();
        context.setContextPath("/"); // 设置应用的上下文路径
//        context.setDescriptor("/path/to/web.xml"); // 设置web.xml的路径
//        context.setResourceBase("/path/to/webapp"); // 设置web应用的目录
        context.setParentLoaderPriority(true); // 设置父类加载器优先

        server.setHandler(context); // 设置处理器

        server.start(); // 启动服务器
        server.join(); // 等待直到服务器停止
    }

    public static void main1(String[] args) throws Exception {
        Server server = new Server(8088); // 设置Jetty服务器端口号

        // 设置Web应用上下文
        WebAppContext context = new WebAppContext();
        context.setContextPath("/");
        context.setResourceBase("src/main/webapp"); // 设置webapp资源目录，根据实际情况修改

        // 配置Jetty以支持JSP
        context.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/classes/.*");
        context.setAttribute("org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern", ".*/classes/.*");

        // 配置Spring的上下文
        XmlWebApplicationContext webApplicationContext = new XmlWebApplicationContext();
//        webApplicationContext.setConfigLocation("classpath:applicationContext.xml");
        webApplicationContext.setConfigLocation("classpath:spring-context.xml");

        // 添加Spring的ContextLoaderListener到Jetty的WebAppContext
        context.addEventListener(new ContextLoaderListener(webApplicationContext));

        // 配置Spring的DispatcherServlet
        DispatcherServlet dispatcherServlet = new DispatcherServlet(webApplicationContext);
        org.eclipse.jetty.servlet.ServletHolder servletHolder = new org.eclipse.jetty.servlet.ServletHolder(dispatcherServlet);
        context.addServlet(servletHolder, "/"); // 映射DispatcherServlet到根路径

        server.setHandler(context);

        server.start();
        server.join();
    }

}
